<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.7.2" />
<title>pandas_profiling API documentation</title>
<meta name="description" content="Main module of pandas-profiling …" />
<link href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel='stylesheet'>
<link href='https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel='stylesheet'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" rel="stylesheet">
<style>.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{font-weight:bold}#index h4 + ul{margin-bottom:.6em}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>pandas_profiling</code></h1>
</header>
<section id="section-intro">
<p>Main module of pandas-profiling.</p>
<h1 id="pandas-profiling">Pandas Profiling</h1>
<p><img alt="Pandas Profiling Logo Header" src="http://pandas-profiling.github.io/pandas-profiling/docs/assets/logo_header.png"></p>
<p><a href="https://travis-ci.com/pandas-profiling/pandas-profiling"><img alt="Build Status" src="https://travis-ci.com/pandas-profiling/pandas-profiling.svg?branch=master"></a>
<a href="https://codecov.io/gh/pandas-profiling/pandas-profiling"><img alt="Code Coverage" src="https://codecov.io/gh/pandas-profiling/pandas-profiling/branch/master/graph/badge.svg?token=gMptB4YUnF"></a>
<a href="https://github.com/pandas-profiling/pandas-profiling/releases"><img alt="Release Version" src="https://img.shields.io/github/release/pandas-profiling/pandas-profiling.svg"></a>
<a href="https://pypi.org/project/pandas-profiling/"><img alt="Python Version" src="https://img.shields.io/pypi/pyversions/pandas-profiling"></a>
<a href="https://github.com/python/black"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a></p>
<p>Generates profile reports from a pandas <code>DataFrame</code>.
The pandas <code>df.describe()</code> function is great but a little basic for serious exploratory data analysis.
<a title="pandas_profiling" href="#pandas_profiling"><code>pandas_profiling</code></a> extends the pandas DataFrame with <code>df.profile_report()</code> for quick data analysis.</p>
<p>For each column the following statistics - if relevant for the column type - are presented in an interactive HTML report:</p>
<ul>
<li><strong>Type inference</strong>: detect the <a href="#types">types</a> of columns in a dataframe.</li>
<li><strong>Essentials</strong>: type, unique values, missing values</li>
<li><strong>Quantile statistics</strong> like minimum value, Q1, median, Q3, maximum, range, interquartile range</li>
<li><strong>Descriptive statistics</strong> like mean, mode, standard deviation, sum, median absolute deviation, coefficient of variation, kurtosis, skewness</li>
<li><strong>Most frequent values</strong></li>
<li><strong>Histogram</strong></li>
<li><strong>Correlations</strong> highlighting of highly correlated variables, Spearman, Pearson and Kendall matrices</li>
<li><strong>Missing values</strong> matrix, count, heatmap and dendrogram of missing values</li>
<li><strong>Text analysis</strong> learn about categories (Uppercase, Space), scripts (Latin, Cyrillic) and blocks (ASCII) of text data.</li>
</ul>
<h2 id="announcements">Announcements</h2>
<p>With your help, we got approved for <a href="https://github.com/sponsors/sbrugman">GitHub Sponsors</a>!
It's extra exciting that GitHub <strong>matches your contribution</strong> for the first year.
Therefore, we welcome you to support the project through GitHub! </p>
<p>The v2.4 release includes many new features (performance, exporting, GUI and datasets) and stability improvements.</p>
<ul>
<li><a href="https://github.com/sponsors/sbrugman">Sponsor the project on GitHub</a></li>
<li><a href="https://github.com/pandas-profiling/pandas-profiling/releases/tag/v2.4.0">Read the release notes v2.4</a> </li>
</ul>
<p><em>January 7, 2020</em></p>
<hr>
<p><em>Contents:</em> <strong><a href="#examples">Examples</a></strong> |
<strong><a href="#installation">Installation</a></strong> | <strong><a href="#documentation">Documentation</a></strong> |
<strong><a href="#large-datasets">Large datasets</a></strong> | <strong><a href="#command-line-usage">Command line usage</a></strong> |
<strong><a href="#advanced-usage">Advanced usage</a></strong> |
<strong><a href="#types">Types</a></strong> | <strong><a href="#how-to-contribute">How to contribute</a></strong> |
<strong><a href="#editor-integration">Editor Integration</a></strong> | <strong><a href="#dependencies">Dependencies</a></strong></p>
<hr>
<h2 id="examples">Examples</h2>
<p>The following examples can give you an impression of what the package can do:</p>
<ul>
<li><a href="http://pandas-profiling.github.io/pandas-profiling/examples/census/census_report.html">Census Income</a> (US Adult Census data relating income)</li>
<li><a href="http://pandas-profiling.github.io/pandas-profiling/examples/meteorites/meteorites_report.html">NASA Meteorites</a> (comprehensive set of meteorite landings)</li>
<li><a href="http://pandas-profiling.github.io/pandas-profiling/examples/titanic/titanic_report.html">Titanic</a> (the "Wonderwall" of datasets)</li>
<li><a href="http://pandas-profiling.github.io/pandas-profiling/examples/nza/nza_report.html">NZA</a> (open data from the Dutch Healthcare Authority)</li>
<li><a href="http://pandas-profiling.github.io/pandas-profiling/examples/stata_auto/stata_auto_report.html">Stata Auto</a> (1978 Automobile data)</li>
<li><a href="http://pandas-profiling.github.io/pandas-profiling/examples/vektis/vektis_report.html">Vektis</a> (Vektis Dutch Healthcare data)</li>
<li><a href="http://pandas-profiling.github.io/pandas-profiling/examples/website_inaccessibility/website_inaccessibility_report.html">Website Inaccessibility</a> (demonstrates the URL type)</li>
<li><a href="http://pandas-profiling.github.io/pandas-profiling/examples/colors/colors_report.html">Colors</a> (a simple colors dataset)</li>
<li><a href="http://pandas-profiling.github.io/pandas-profiling/examples/russian_vocabulary/russian_vocabulary.html">Russian Vocabulary</a> (demonstrates text analysis)</li>
</ul>
<h2 id="installation">Installation</h2>
<h3 id="using-pip">Using pip</h3>
<p><a href="https://pepy.tech/project/pandas-profiling"><img alt="PyPi Downloads" src="https://pepy.tech/badge/pandas-profiling"></a>
<a href="https://pepy.tech/project/pandas-profiling/month"><img alt="PyPi Monthly Downloads" src="https://pepy.tech/badge/pandas-profiling/month"></a>
<a href="https://pypi.org/project/pandas-profiling/"><img alt="PyPi Version" src="https://badge.fury.io/py/pandas-profiling.svg"></a></p>
<p>You can install using the pip package manager by running</p>
<pre><code>pip install pandas-profiling[notebook,html]
</code></pre>
<p>Alternatively, you could install directly from Github:</p>
<pre><code>pip install &lt;https://github.com/pandas-profiling/pandas-profiling/archive/master.zip&gt;
</code></pre>
<h3 id="using-conda">Using conda</h3>
<p><a href="https://anaconda.org/conda-forge/pandas-profiling"><img alt="Conda Downloads" src="https://img.shields.io/conda/dn/conda-forge/pandas-profiling.svg"></a>
<a href="https://anaconda.org/conda-forge/pandas-profiling"><img alt="Conda Version" src="https://img.shields.io/conda/vn/conda-forge/pandas-profiling.svg"></a> </p>
<p>You can install using the conda package manager by running</p>
<pre><code>conda install -c conda-forge pandas-profiling
</code></pre>
<h3 id="from-source">From source</h3>
<p>Download the source code by cloning the repository or by pressing <a href="https://github.com/pandas-profiling/pandas-profiling/archive/master.zip">'Download ZIP'</a> on this page.
Install by navigating to the proper directory and running</p>
<pre><code>python setup.py install
</code></pre>
<h2 id="documentation">Documentation</h2>
<p>The documentation for <a title="pandas_profiling" href="#pandas_profiling"><code>pandas_profiling</code></a> can be found <a href="https://pandas-profiling.github.io/pandas-profiling/docs/">here</a>.</p>
<h3 id="getting-started">Getting started</h3>
<p>Start by loading in your pandas DataFrame, e.g. by using</p>
<pre><code class="python">import numpy as np
import pandas as pd
from pandas_profiling import ProfileReport

df = pd.DataFrame(
    np.random.rand(100, 5),
    columns=['a', 'b', 'c', 'd', 'e']
)
</code></pre>
<p>To generate the report, run:</p>
<pre><code class="python">profile = ProfileReport(df, title='Pandas Profiling Report', html={'style':{'full_width':True}})
</code></pre>
<h4 id="jupyter-notebook">Jupyter Notebook</h4>
<p>We recommend generating reports interactively by using the Jupyter notebook.
There are two interfaces (see animations below): through widgets and through a HTML report.</p>
<p><img alt="Notebook Widgets" src="http://pandas-profiling.github.io/pandas-profiling/docs/assets/widgets.gif" width="800" /></p>
<p>This is achieved by simply displaying the report. In the Jupyter Notebook, run:</p>
<pre><code class="python">profile
</code></pre>
<p>The HTML report can be included in a Juyter notebook:</p>
<p><img alt="HTML" src="http://pandas-profiling.github.io/pandas-profiling/docs/assets/iframe.gif" width="800" /></p>
<p>Run the following code:</p>
<pre><code class="python">profile.to_notebook_iframe()
</code></pre>
<h4 id="saving-the-report">Saving the report</h4>
<p>If you want to generate a HTML report file, save the <code>ProfileReport</code> to an object and use the <code>to_file()</code> function:</p>
<pre><code class="python">profile.to_file(output_file=&quot;your_report.html&quot;)
</code></pre>
<p>Alternatively, you can obtain the data as json:</p>
<pre><code class="python"># As a string
json_data = profile.to_json()

# As a file
profile.to_file(output_file=&quot;your_report.json&quot;)
</code></pre>
<h3 id="large-datasets">Large datasets</h3>
<p>Version 2.4 introduces minimal mode.
This is a default configuration that disables expensive computations (such as correlations and dynamic binning).
Use the following syntax:</p>
<pre><code class="python">profile = ProfileReport(large_dataset, minimal=True)
profile.to_file(output_file=&quot;output.html&quot;)
</code></pre>
<h3 id="command-line-usage">Command line usage</h3>
<p>For standard formatted CSV files that can be read immediately by pandas, you can use the <code>pandas_profiling</code> executable. Run</p>
<pre><code>pandas_profiling -h
</code></pre>
<p>for information about options and arguments.</p>
<h3 id="advanced-usage">Advanced usage</h3>
<p>A set of options is available in order to adapt the report generated.</p>
<ul>
<li><code>title</code> (<code>str</code>): Title for the report ('Pandas Profiling Report' by default).</li>
<li><code>pool_size</code> (<code>int</code>): Number of workers in thread pool. When set to zero, it is set to the number of CPUs available (0 by default).</li>
<li><code>progress_bar</code> (<code>bool</code>): If True, <code>pandas-profiling</code> will display a progress bar.</li>
</ul>
<p>More settings can be found in the <a href="https://github.com/pandas-profiling/pandas-profiling/blob/master/src/pandas_profiling/config_default.yaml">default configuration file</a>, <a href="https://github.com/pandas-profiling/pandas-profiling/blob/master/src/pandas_profiling/config_minimal.yaml">minimal configuration file</a> and <a href="https://github.com/pandas-profiling/pandas-profiling/blob/master/src/pandas_profiling/config_dark.yaml">dark themed configuration file</a>.</p>
<p><strong>Example</strong></p>
<pre><code class="python">profile = df.profile_report(title='Pandas Profiling Report', plot={'histogram': {'bins': 8}})
profile.to_file(output_file=&quot;output.html&quot;)
</code></pre>
<h2 id="types">Types</h2>
<p>Types are a powerful abstraction for effective data analysis, that goes beyond the logical data types (integer, float etc.).
<code>pandas-profiling</code> currently recognizes the following types:</p>
<ul>
<li>Boolean</li>
<li>Numerical</li>
<li>Date</li>
<li>Categorical</li>
<li>URL</li>
<li>Path</li>
</ul>
<p>We have developed a type system for Python, tailored for data analysis: <a href="https://github.com/dylan-profiler/visions">visions</a>.
Selecting the right typeset drastically reduces the complexity the code of your analysis.
Future versions of <code>pandas-profiling</code> will have extended type support through <code>visions</code>!</p>
<h2 id="how-to-contribute">How to contribute</h2>
<p><a href="https://stackoverflow.com/questions/tagged/pandas-profiling"><img alt="Questions: Stackoverflow &quot;pandas-profiling&quot;" src="https://img.shields.io/badge/stackoverflow%20tag-pandas%20profiling-yellow"></a></p>
<p>The package is actively maintained and developed as open-source software.
If <code>pandas-profiling</code> was helpful or interesting to you, you might want to get involved.
There are several ways of contributing and helping our thousands of users.
If you would like to be a industry partner or sponsor, please <a href="mailto:pandasprofiling@gmail.com">drop us a line</a>.</p>
<p>The documentation is generated using <a href="https://github.com/pdoc3/pdoc"><code>pdoc3</code></a>.
If you are contributing to this project, you can rebuild the documentation using:</p>
<pre><code>make docs
</code></pre>
<p>or on Windows:</p>
<pre><code>make.bat docs
</code></pre>
<p>Read more on getting involved in the <a href="https://github.com/pandas-profiling/pandas-profiling/blob/master/CONTRIBUTING.md">Contribution Guide</a>.</p>
<h2 id="editor-integration">Editor integration</h2>
<h3 id="pycharm-integration">PyCharm integration</h3>
<ol>
<li>Install <code>pandas-profiling</code> via the instructions above</li>
<li>
<p>Locate your <code>pandas-profiling</code> executable.</p>
<p>On macOS / Linux / BSD:</p>
<p><code>console
$ which pandas_profiling
(example) /usr/local/bin/pandas_profiling</code></p>
<p>On Windows:</p>
<p><code>console
$ where pandas_profiling
(example) C:\ProgramData\Anaconda3\Scripts\pandas_profiling.exe</code></p>
</li>
<li>
<p>In Pycharm, go to <em>Settings</em> (or <em>Preferences</em> on macOS) &gt; <em>Tools</em> &gt; <em>External tools</em></p>
</li>
<li>Click the <em>+</em> icon to add a new external tool</li>
<li>Insert the following values<ul>
<li>Name: Pandas Profiling</li>
<li>Program: <em><strong>The location obtained in step 2</strong></em></li>
<li>Arguments: "$FilePath$" "$FileDir$/$FileNameWithoutAllExtensions$_report.html"</li>
<li>Working Directory: $ProjectFileDir$</li>
</ul>
</li>
</ol>
<p><img alt="PyCharm Integration" src="http://pandas-profiling.github.io/pandas-profiling/docs/assets/pycharm-integration.png" width="400" /></p>
<p>To use the PyCharm Integration, right click on any dataset file:
<em>External Tools</em> &gt; <em>Pandas Profiling</em>.</p>
<h3 id="other-integrations">Other integrations</h3>
<p>Other editor integrations may be contributed via pull requests.</p>
<h2 id="dependencies">Dependencies</h2>
<p>The profile report is written in HTML and CSS, which means pandas-profiling requires a modern browser. </p>
<p>You need <a href="https://python3statement.org/">Python 3</a> to run this package. Other dependencies can be found in the requirements files:</p>
<table>
<thead>
<tr>
<th>Filename</th>
<th>Requirements</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/pandas-profiling/pandas-profiling/blob/master/requirements.txt">requirements.txt</a></td>
<td>Package requirements</td>
</tr>
<tr>
<td><a href="https://github.com/pandas-profiling/pandas-profiling/blob/master/requirements-dev.txt">requirements-dev.txt</a></td>
<td>Requirements for development</td>
</tr>
<tr>
<td><a href="https://github.com/pandas-profiling/pandas-profiling/blob/master/requirements-test.txt">requirements-test.txt</a></td>
<td>Requirements for testing</td>
</tr>
<tr>
<td><a href="https://github.com/pandas-profiling/pandas-profiling/blob/master/setup.py">setup.py</a></td>
<td>Requirements for Widgets etc.</td>
</tr>
</tbody>
</table>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">&#34;&#34;&#34;Main module of pandas-profiling.

.. include:: ../../README.md
&#34;&#34;&#34;
import sys
import warnings
import json
from pathlib import Path
from datetime import datetime

import pandas as pd
import numpy as np
from tqdm.auto import tqdm

from pandas_profiling.model.messages import MessageType
from pandas_profiling.version import __version__
from pandas_profiling.utils.dataframe import rename_index
from pandas_profiling.utils.paths import get_config_default, get_config_minimal
from pandas_profiling.config import config
from pandas_profiling.controller import pandas_decorator
from pandas_profiling.model.describe import describe as describe_df
from pandas_profiling.model.messages import MessageType
from pandas_profiling.report import get_report_structure


class ProfileReport(object):
    &#34;&#34;&#34;Generate a profile report from a Dataset stored as a pandas `DataFrame`.
    
    Used has is it will output its content as an HTML report in a Jupyter notebook.
    &#34;&#34;&#34;

    html = &#34;&#34;
    &#34;&#34;&#34;the HTML representation of the report, without the wrapper (containing `&lt;head&gt;` etc.)&#34;&#34;&#34;

    def __init__(self, df, minimal=False, config_file: Path = None, **kwargs):
        if config_file is not None and minimal:
            raise ValueError(
                &#34;Arguments `config_file` and `minimal` are mutually exclusive.&#34;
            )

        if minimal:
            config_file = get_config_minimal()

        if config_file:
            config.config.set_file(str(config_file))
        config.set_kwargs(kwargs)

        self.date_start = datetime.utcnow()

        # Treat index as any other column
        if (
            not pd.Index(np.arange(0, len(df))).equals(df.index)
            or df.index.dtype != np.int64
        ):
            df = df.reset_index()

        # Rename reserved column names
        df = rename_index(df)

        # Ensure that columns are strings
        df.columns = df.columns.astype(&#34;str&#34;)

        # Get dataset statistics
        description_set = describe_df(df)

        # Build report structure
        self.sample = self.get_sample(df)
        self.title = config[&#34;title&#34;].get(str)
        self.description_set = description_set
        self.date_end = datetime.utcnow()

        disable_progress_bar = not config[&#34;progress_bar&#34;].get(bool)

        with tqdm(
            total=1, desc=&#34;build report structure&#34;, disable=disable_progress_bar
        ) as pbar:
            self.report = get_report_structure(
                self.date_start, self.date_end, self.sample, description_set
            )
            pbar.update(1)

    def get_sample(self, df: pd.DataFrame) -&gt; dict:
        sample = {}
        n_head = config[&#34;samples&#34;][&#34;head&#34;].get(int)
        if n_head &gt; 0:
            sample[&#34;head&#34;] = df.head(n=n_head)

        n_tail = config[&#34;samples&#34;][&#34;tail&#34;].get(int)
        if n_tail &gt; 0:
            sample[&#34;tail&#34;] = df.tail(n=n_tail)

        return sample

    def get_description(self) -&gt; dict:
        &#34;&#34;&#34;Return the description (a raw statistical summary) of the dataset.
        
        Returns:
            Dict containing a description for each variable in the DataFrame.
        &#34;&#34;&#34;
        return self.description_set

    def get_rejected_variables(self) -&gt; list:
        return [
            message.column_name
            for message in self.description_set[&#34;messages&#34;]
            if message.message_type == MessageType.REJECTED
        ]

    def to_file(self, output_file: Path, silent: bool = True) -&gt; None:
        &#34;&#34;&#34;Write the report to a file.
        
        By default a name is generated.

        Args:
            output_file: The name or the path of the file to generate including the extension (.html, .json).
            silent: if False, opens the file in the default browser
        &#34;&#34;&#34;
        if not isinstance(output_file, Path):
            output_file = Path(str(output_file))

        if output_file.suffix == &#34;.html&#34;:
            data = self.to_html()
        elif output_file.suffix == &#34;.json&#34;:
            data = self.to_json()
        else:
            raise ValueError(&#34;Extension not supported (please use .html, .json)&#34;)

        with output_file.open(&#34;w&#34;, encoding=&#34;utf8&#34;) as f:
            f.write(data)

        if not silent:
            import webbrowser

            webbrowser.open_new_tab(output_file.absolute().as_uri())

    def to_html(self) -&gt; str:
        &#34;&#34;&#34;Generate and return complete template as lengthy string
            for using with frameworks.

        Returns:
            Profiling report html including wrapper.
        
        &#34;&#34;&#34;
        from pandas_profiling.report.presentation.flavours import HTMLReport
        from pandas_profiling.report.presentation.flavours.html import templates

        use_local_assets = config[&#34;html&#34;][&#34;use_local_assets&#34;].get(bool)

        html = HTMLReport(self.report).render()

        # TODO: move to structure
        wrapped_html = templates.template(&#34;wrapper/wrapper.html&#34;).render(
            content=html,
            title=self.title,
            correlation=len(self.description_set[&#34;correlations&#34;]) &gt; 0,
            missing=len(self.description_set[&#34;missing&#34;]) &gt; 0,
            scatter=len(self.description_set[&#34;scatter&#34;]) &gt; 0,
            sample=len(self.sample) &gt; 0,
            version=__version__,
            offline=use_local_assets,
            primary_color=config[&#34;html&#34;][&#34;style&#34;][&#34;primary_color&#34;].get(str),
            logo=config[&#34;html&#34;][&#34;style&#34;][&#34;logo&#34;].get(str),
            theme=config[&#34;html&#34;][&#34;style&#34;][&#34;theme&#34;].get(str),
        )

        minify_html = config[&#34;html&#34;][&#34;minify_html&#34;].get(bool)
        if minify_html:
            from htmlmin.main import minify

            wrapped_html = minify(
                wrapped_html, remove_all_empty_space=True, remove_comments=True
            )
        return wrapped_html

    def to_json(self) -&gt; str:
        class CustomEncoder(json.JSONEncoder):
            def default(self, o):
                if isinstance(o, pd.core.series.Series) or isinstance(
                    o, pd.core.frame.DataFrame
                ):
                    return {&#34;__{}__&#34;.format(o.__class__.__name__): o.to_json()}
                if isinstance(o, np.integer):
                    return {&#34;__{}__&#34;.format(o.__class__.__name__): o.tolist()}

                return {&#34;__{}__&#34;.format(o.__class__.__name__): str(o)}

        return json.dumps(self.description_set, indent=4, cls=CustomEncoder)

    def to_notebook_iframe(self):
        &#34;&#34;&#34;Used to output the HTML representation to a Jupyter notebook.
        When config.notebook.iframe.attribute is &#34;src&#34;, this function creates a temporary HTML file
        in `./tmp/profile_[hash].html` and returns an Iframe pointing to that contents.
        When config.notebook.iframe.attribute is &#34;srcdoc&#34;, the same HTML is injected in the &#34;srcdoc&#34; attribute of
        the Iframe.

        Notes:
            This constructions solves problems with conflicting stylesheets and navigation links.
        &#34;&#34;&#34;
        from pandas_profiling.report.presentation.flavours.widget.notebook import (
            get_notebook_iframe,
        )
        from IPython.core.display import display

        display(get_notebook_iframe(self))

    def to_widgets(self):
        &#34;&#34;&#34;The ipython notebook widgets user interface.&#34;&#34;&#34;
        from pandas_profiling.report.presentation.flavours import WidgetReport
        from IPython.core.display import display, HTML

        report = WidgetReport(self.report).render()

        display(report)
        # TODO: move to report structure
        display(
            HTML(
                &#39;Report generated with &lt;a href=&#34;https://github.com/pandas-profiling/pandas-profiling&#34;&gt;pandas-profiling&lt;/a&gt;.&#39;
            )
        )

    def _repr_html_(self):
        &#34;&#34;&#34;The ipython notebook widgets user interface gets called by the jupyter notebook.&#34;&#34;&#34;
        self.to_notebook_iframe()

    def __repr__(self):
        &#34;&#34;&#34;Override so that Jupyter Notebook does not print the object.&#34;&#34;&#34;
        return &#34;&#34;

    def to_app(self):
        &#34;&#34;&#34;
        (Experimental) PyQt5 user interface, not ready to be used.
        You are welcome to contribute a pull request if you like this feature.
        &#34;&#34;&#34;
        from pandas_profiling.report.presentation.flavours.qt.app import get_app
        from pandas_profiling.report.presentation.flavours import QtReport

        from PyQt5 import QtCore
        from PyQt5.QtWidgets import QApplication

        app = QtCore.QCoreApplication.instance()
        if app is None:
            app = QApplication([])

        app_widgets = QtReport(self.report).render()

        app = get_app(app, self.title, app_widgets)</code></pre>
</details>
</section>
<section>
<h2 class="section-title" id="header-submodules">Sub-modules</h2>
<dl>
<dt><code class="name"><a title="pandas_profiling.config" href="config.html">pandas_profiling.config</a></code></dt>
<dd>
<section class="desc"><p>Configuration for the package is handled in this wrapper for confuse.</p></section>
</dd>
<dt><code class="name"><a title="pandas_profiling.controller" href="controller/index.html">pandas_profiling.controller</a></code></dt>
<dd>
<section class="desc"><p>The controller module handles all user interaction with the package (console, jupyter, etc.).</p></section>
</dd>
<dt><code class="name"><a title="pandas_profiling.model" href="model/index.html">pandas_profiling.model</a></code></dt>
<dd>
<section class="desc"><p>The model module handles all logic/calculations, e.g. calculate statistics, testing for special conditions.</p></section>
</dd>
<dt><code class="name"><a title="pandas_profiling.report" href="report/index.html">pandas_profiling.report</a></code></dt>
<dd>
<section class="desc"><p>All functionality concerned with presentation to the user.</p></section>
</dd>
<dt><code class="name"><a title="pandas_profiling.utils" href="utils/index.html">pandas_profiling.utils</a></code></dt>
<dd>
<section class="desc"><p>Utility functions for the complete package.</p></section>
</dd>
<dt><code class="name"><a title="pandas_profiling.version" href="version.html">pandas_profiling.version</a></code></dt>
<dd>
<section class="desc"><p>This file is auto-generated by setup.py, please do not alter.</p></section>
</dd>
<dt><code class="name"><a title="pandas_profiling.visualisation" href="visualisation/index.html">pandas_profiling.visualisation</a></code></dt>
<dd>
<section class="desc"><p>Code for generating plots</p></section>
</dd>
</dl>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="pandas_profiling.ProfileReport"><code class="flex name class">
<span>class <span class="ident">ProfileReport</span></span>
<span>(</span><span>df, minimal=False, config_file=None, **kwargs)</span>
</code></dt>
<dd>
<section class="desc"><p>Generate a profile report from a Dataset stored as a pandas <code>DataFrame</code>.</p>
<p>Used has is it will output its content as an HTML report in a Jupyter notebook.</p></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class ProfileReport(object):
    &#34;&#34;&#34;Generate a profile report from a Dataset stored as a pandas `DataFrame`.
    
    Used has is it will output its content as an HTML report in a Jupyter notebook.
    &#34;&#34;&#34;

    html = &#34;&#34;
    &#34;&#34;&#34;the HTML representation of the report, without the wrapper (containing `&lt;head&gt;` etc.)&#34;&#34;&#34;

    def __init__(self, df, minimal=False, config_file: Path = None, **kwargs):
        if config_file is not None and minimal:
            raise ValueError(
                &#34;Arguments `config_file` and `minimal` are mutually exclusive.&#34;
            )

        if minimal:
            config_file = get_config_minimal()

        if config_file:
            config.config.set_file(str(config_file))
        config.set_kwargs(kwargs)

        self.date_start = datetime.utcnow()

        # Treat index as any other column
        if (
            not pd.Index(np.arange(0, len(df))).equals(df.index)
            or df.index.dtype != np.int64
        ):
            df = df.reset_index()

        # Rename reserved column names
        df = rename_index(df)

        # Ensure that columns are strings
        df.columns = df.columns.astype(&#34;str&#34;)

        # Get dataset statistics
        description_set = describe_df(df)

        # Build report structure
        self.sample = self.get_sample(df)
        self.title = config[&#34;title&#34;].get(str)
        self.description_set = description_set
        self.date_end = datetime.utcnow()

        disable_progress_bar = not config[&#34;progress_bar&#34;].get(bool)

        with tqdm(
            total=1, desc=&#34;build report structure&#34;, disable=disable_progress_bar
        ) as pbar:
            self.report = get_report_structure(
                self.date_start, self.date_end, self.sample, description_set
            )
            pbar.update(1)

    def get_sample(self, df: pd.DataFrame) -&gt; dict:
        sample = {}
        n_head = config[&#34;samples&#34;][&#34;head&#34;].get(int)
        if n_head &gt; 0:
            sample[&#34;head&#34;] = df.head(n=n_head)

        n_tail = config[&#34;samples&#34;][&#34;tail&#34;].get(int)
        if n_tail &gt; 0:
            sample[&#34;tail&#34;] = df.tail(n=n_tail)

        return sample

    def get_description(self) -&gt; dict:
        &#34;&#34;&#34;Return the description (a raw statistical summary) of the dataset.
        
        Returns:
            Dict containing a description for each variable in the DataFrame.
        &#34;&#34;&#34;
        return self.description_set

    def get_rejected_variables(self) -&gt; list:
        return [
            message.column_name
            for message in self.description_set[&#34;messages&#34;]
            if message.message_type == MessageType.REJECTED
        ]

    def to_file(self, output_file: Path, silent: bool = True) -&gt; None:
        &#34;&#34;&#34;Write the report to a file.
        
        By default a name is generated.

        Args:
            output_file: The name or the path of the file to generate including the extension (.html, .json).
            silent: if False, opens the file in the default browser
        &#34;&#34;&#34;
        if not isinstance(output_file, Path):
            output_file = Path(str(output_file))

        if output_file.suffix == &#34;.html&#34;:
            data = self.to_html()
        elif output_file.suffix == &#34;.json&#34;:
            data = self.to_json()
        else:
            raise ValueError(&#34;Extension not supported (please use .html, .json)&#34;)

        with output_file.open(&#34;w&#34;, encoding=&#34;utf8&#34;) as f:
            f.write(data)

        if not silent:
            import webbrowser

            webbrowser.open_new_tab(output_file.absolute().as_uri())

    def to_html(self) -&gt; str:
        &#34;&#34;&#34;Generate and return complete template as lengthy string
            for using with frameworks.

        Returns:
            Profiling report html including wrapper.
        
        &#34;&#34;&#34;
        from pandas_profiling.report.presentation.flavours import HTMLReport
        from pandas_profiling.report.presentation.flavours.html import templates

        use_local_assets = config[&#34;html&#34;][&#34;use_local_assets&#34;].get(bool)

        html = HTMLReport(self.report).render()

        # TODO: move to structure
        wrapped_html = templates.template(&#34;wrapper/wrapper.html&#34;).render(
            content=html,
            title=self.title,
            correlation=len(self.description_set[&#34;correlations&#34;]) &gt; 0,
            missing=len(self.description_set[&#34;missing&#34;]) &gt; 0,
            scatter=len(self.description_set[&#34;scatter&#34;]) &gt; 0,
            sample=len(self.sample) &gt; 0,
            version=__version__,
            offline=use_local_assets,
            primary_color=config[&#34;html&#34;][&#34;style&#34;][&#34;primary_color&#34;].get(str),
            logo=config[&#34;html&#34;][&#34;style&#34;][&#34;logo&#34;].get(str),
            theme=config[&#34;html&#34;][&#34;style&#34;][&#34;theme&#34;].get(str),
        )

        minify_html = config[&#34;html&#34;][&#34;minify_html&#34;].get(bool)
        if minify_html:
            from htmlmin.main import minify

            wrapped_html = minify(
                wrapped_html, remove_all_empty_space=True, remove_comments=True
            )
        return wrapped_html

    def to_json(self) -&gt; str:
        class CustomEncoder(json.JSONEncoder):
            def default(self, o):
                if isinstance(o, pd.core.series.Series) or isinstance(
                    o, pd.core.frame.DataFrame
                ):
                    return {&#34;__{}__&#34;.format(o.__class__.__name__): o.to_json()}
                if isinstance(o, np.integer):
                    return {&#34;__{}__&#34;.format(o.__class__.__name__): o.tolist()}

                return {&#34;__{}__&#34;.format(o.__class__.__name__): str(o)}

        return json.dumps(self.description_set, indent=4, cls=CustomEncoder)

    def to_notebook_iframe(self):
        &#34;&#34;&#34;Used to output the HTML representation to a Jupyter notebook.
        When config.notebook.iframe.attribute is &#34;src&#34;, this function creates a temporary HTML file
        in `./tmp/profile_[hash].html` and returns an Iframe pointing to that contents.
        When config.notebook.iframe.attribute is &#34;srcdoc&#34;, the same HTML is injected in the &#34;srcdoc&#34; attribute of
        the Iframe.

        Notes:
            This constructions solves problems with conflicting stylesheets and navigation links.
        &#34;&#34;&#34;
        from pandas_profiling.report.presentation.flavours.widget.notebook import (
            get_notebook_iframe,
        )
        from IPython.core.display import display

        display(get_notebook_iframe(self))

    def to_widgets(self):
        &#34;&#34;&#34;The ipython notebook widgets user interface.&#34;&#34;&#34;
        from pandas_profiling.report.presentation.flavours import WidgetReport
        from IPython.core.display import display, HTML

        report = WidgetReport(self.report).render()

        display(report)
        # TODO: move to report structure
        display(
            HTML(
                &#39;Report generated with &lt;a href=&#34;https://github.com/pandas-profiling/pandas-profiling&#34;&gt;pandas-profiling&lt;/a&gt;.&#39;
            )
        )

    def _repr_html_(self):
        &#34;&#34;&#34;The ipython notebook widgets user interface gets called by the jupyter notebook.&#34;&#34;&#34;
        self.to_notebook_iframe()

    def __repr__(self):
        &#34;&#34;&#34;Override so that Jupyter Notebook does not print the object.&#34;&#34;&#34;
        return &#34;&#34;

    def to_app(self):
        &#34;&#34;&#34;
        (Experimental) PyQt5 user interface, not ready to be used.
        You are welcome to contribute a pull request if you like this feature.
        &#34;&#34;&#34;
        from pandas_profiling.report.presentation.flavours.qt.app import get_app
        from pandas_profiling.report.presentation.flavours import QtReport

        from PyQt5 import QtCore
        from PyQt5.QtWidgets import QApplication

        app = QtCore.QCoreApplication.instance()
        if app is None:
            app = QApplication([])

        app_widgets = QtReport(self.report).render()

        app = get_app(app, self.title, app_widgets)</code></pre>
</details>
<h3>Class variables</h3>
<dl>
<dt id="pandas_profiling.ProfileReport.html"><code class="name">var <span class="ident">html</span></code></dt>
<dd>
<section class="desc"><p>the HTML representation of the report, without the wrapper (containing <code>&lt;head&gt;</code> etc.)</p></section>
</dd>
</dl>
<h3>Methods</h3>
<dl>
<dt id="pandas_profiling.ProfileReport.get_description"><code class="name flex">
<span>def <span class="ident">get_description</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Return the description (a raw statistical summary) of the dataset.</p>
<h2 id="returns">Returns</h2>
<p>Dict containing a description for each variable in the DataFrame.</p></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_description(self) -&gt; dict:
    &#34;&#34;&#34;Return the description (a raw statistical summary) of the dataset.
    
    Returns:
        Dict containing a description for each variable in the DataFrame.
    &#34;&#34;&#34;
    return self.description_set</code></pre>
</details>
</dd>
<dt id="pandas_profiling.ProfileReport.get_rejected_variables"><code class="name flex">
<span>def <span class="ident">get_rejected_variables</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_rejected_variables(self) -&gt; list:
    return [
        message.column_name
        for message in self.description_set[&#34;messages&#34;]
        if message.message_type == MessageType.REJECTED
    ]</code></pre>
</details>
</dd>
<dt id="pandas_profiling.ProfileReport.get_sample"><code class="name flex">
<span>def <span class="ident">get_sample</span></span>(<span>self, df)</span>
</code></dt>
<dd>
<section class="desc"></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_sample(self, df: pd.DataFrame) -&gt; dict:
    sample = {}
    n_head = config[&#34;samples&#34;][&#34;head&#34;].get(int)
    if n_head &gt; 0:
        sample[&#34;head&#34;] = df.head(n=n_head)

    n_tail = config[&#34;samples&#34;][&#34;tail&#34;].get(int)
    if n_tail &gt; 0:
        sample[&#34;tail&#34;] = df.tail(n=n_tail)

    return sample</code></pre>
</details>
</dd>
<dt id="pandas_profiling.ProfileReport.to_app"><code class="name flex">
<span>def <span class="ident">to_app</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>(Experimental) PyQt5 user interface, not ready to be used.
You are welcome to contribute a pull request if you like this feature.</p></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def to_app(self):
    &#34;&#34;&#34;
    (Experimental) PyQt5 user interface, not ready to be used.
    You are welcome to contribute a pull request if you like this feature.
    &#34;&#34;&#34;
    from pandas_profiling.report.presentation.flavours.qt.app import get_app
    from pandas_profiling.report.presentation.flavours import QtReport

    from PyQt5 import QtCore
    from PyQt5.QtWidgets import QApplication

    app = QtCore.QCoreApplication.instance()
    if app is None:
        app = QApplication([])

    app_widgets = QtReport(self.report).render()

    app = get_app(app, self.title, app_widgets)</code></pre>
</details>
</dd>
<dt id="pandas_profiling.ProfileReport.to_file"><code class="name flex">
<span>def <span class="ident">to_file</span></span>(<span>self, output_file, silent=True)</span>
</code></dt>
<dd>
<section class="desc"><p>Write the report to a file.</p>
<p>By default a name is generated.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>output_file</code></strong></dt>
<dd>The name or the path of the file to generate including the extension (.html, .json).</dd>
<dt><strong><code>silent</code></strong></dt>
<dd>if False, opens the file in the default browser</dd>
</dl></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def to_file(self, output_file: Path, silent: bool = True) -&gt; None:
    &#34;&#34;&#34;Write the report to a file.
    
    By default a name is generated.

    Args:
        output_file: The name or the path of the file to generate including the extension (.html, .json).
        silent: if False, opens the file in the default browser
    &#34;&#34;&#34;
    if not isinstance(output_file, Path):
        output_file = Path(str(output_file))

    if output_file.suffix == &#34;.html&#34;:
        data = self.to_html()
    elif output_file.suffix == &#34;.json&#34;:
        data = self.to_json()
    else:
        raise ValueError(&#34;Extension not supported (please use .html, .json)&#34;)

    with output_file.open(&#34;w&#34;, encoding=&#34;utf8&#34;) as f:
        f.write(data)

    if not silent:
        import webbrowser

        webbrowser.open_new_tab(output_file.absolute().as_uri())</code></pre>
</details>
</dd>
<dt id="pandas_profiling.ProfileReport.to_html"><code class="name flex">
<span>def <span class="ident">to_html</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Generate and return complete template as lengthy string
for using with frameworks.</p>
<h2 id="returns">Returns</h2>
<p>Profiling report html including wrapper.</p></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def to_html(self) -&gt; str:
    &#34;&#34;&#34;Generate and return complete template as lengthy string
        for using with frameworks.

    Returns:
        Profiling report html including wrapper.
    
    &#34;&#34;&#34;
    from pandas_profiling.report.presentation.flavours import HTMLReport
    from pandas_profiling.report.presentation.flavours.html import templates

    use_local_assets = config[&#34;html&#34;][&#34;use_local_assets&#34;].get(bool)

    html = HTMLReport(self.report).render()

    # TODO: move to structure
    wrapped_html = templates.template(&#34;wrapper/wrapper.html&#34;).render(
        content=html,
        title=self.title,
        correlation=len(self.description_set[&#34;correlations&#34;]) &gt; 0,
        missing=len(self.description_set[&#34;missing&#34;]) &gt; 0,
        scatter=len(self.description_set[&#34;scatter&#34;]) &gt; 0,
        sample=len(self.sample) &gt; 0,
        version=__version__,
        offline=use_local_assets,
        primary_color=config[&#34;html&#34;][&#34;style&#34;][&#34;primary_color&#34;].get(str),
        logo=config[&#34;html&#34;][&#34;style&#34;][&#34;logo&#34;].get(str),
        theme=config[&#34;html&#34;][&#34;style&#34;][&#34;theme&#34;].get(str),
    )

    minify_html = config[&#34;html&#34;][&#34;minify_html&#34;].get(bool)
    if minify_html:
        from htmlmin.main import minify

        wrapped_html = minify(
            wrapped_html, remove_all_empty_space=True, remove_comments=True
        )
    return wrapped_html</code></pre>
</details>
</dd>
<dt id="pandas_profiling.ProfileReport.to_json"><code class="name flex">
<span>def <span class="ident">to_json</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def to_json(self) -&gt; str:
    class CustomEncoder(json.JSONEncoder):
        def default(self, o):
            if isinstance(o, pd.core.series.Series) or isinstance(
                o, pd.core.frame.DataFrame
            ):
                return {&#34;__{}__&#34;.format(o.__class__.__name__): o.to_json()}
            if isinstance(o, np.integer):
                return {&#34;__{}__&#34;.format(o.__class__.__name__): o.tolist()}

            return {&#34;__{}__&#34;.format(o.__class__.__name__): str(o)}

    return json.dumps(self.description_set, indent=4, cls=CustomEncoder)</code></pre>
</details>
</dd>
<dt id="pandas_profiling.ProfileReport.to_notebook_iframe"><code class="name flex">
<span>def <span class="ident">to_notebook_iframe</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>Used to output the HTML representation to a Jupyter notebook.
When config.notebook.iframe.attribute is "src", this function creates a temporary HTML file
in <code>./tmp/profile_[hash].html</code> and returns an Iframe pointing to that contents.
When config.notebook.iframe.attribute is "srcdoc", the same HTML is injected in the "srcdoc" attribute of
the Iframe.</p>
<h2 id="notes">Notes</h2>
<p>This constructions solves problems with conflicting stylesheets and navigation links.</p></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def to_notebook_iframe(self):
    &#34;&#34;&#34;Used to output the HTML representation to a Jupyter notebook.
    When config.notebook.iframe.attribute is &#34;src&#34;, this function creates a temporary HTML file
    in `./tmp/profile_[hash].html` and returns an Iframe pointing to that contents.
    When config.notebook.iframe.attribute is &#34;srcdoc&#34;, the same HTML is injected in the &#34;srcdoc&#34; attribute of
    the Iframe.

    Notes:
        This constructions solves problems with conflicting stylesheets and navigation links.
    &#34;&#34;&#34;
    from pandas_profiling.report.presentation.flavours.widget.notebook import (
        get_notebook_iframe,
    )
    from IPython.core.display import display

    display(get_notebook_iframe(self))</code></pre>
</details>
</dd>
<dt id="pandas_profiling.ProfileReport.to_widgets"><code class="name flex">
<span>def <span class="ident">to_widgets</span></span>(<span>self)</span>
</code></dt>
<dd>
<section class="desc"><p>The ipython notebook widgets user interface.</p></section>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def to_widgets(self):
    &#34;&#34;&#34;The ipython notebook widgets user interface.&#34;&#34;&#34;
    from pandas_profiling.report.presentation.flavours import WidgetReport
    from IPython.core.display import display, HTML

    report = WidgetReport(self.report).render()

    display(report)
    # TODO: move to report structure
    display(
        HTML(
            &#39;Report generated with &lt;a href=&#34;https://github.com/pandas-profiling/pandas-profiling&#34;&gt;pandas-profiling&lt;/a&gt;.&#39;
        )
    )</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul>
<li><a href="#pandas-profiling">Pandas Profiling</a><ul>
<li><a href="#announcements">Announcements</a></li>
<li><a href="#examples">Examples</a></li>
<li><a href="#installation">Installation</a><ul>
<li><a href="#using-pip">Using pip</a></li>
<li><a href="#using-conda">Using conda</a></li>
<li><a href="#from-source">From source</a></li>
</ul>
</li>
<li><a href="#documentation">Documentation</a><ul>
<li><a href="#getting-started">Getting started</a><ul>
<li><a href="#jupyter-notebook">Jupyter Notebook</a></li>
<li><a href="#saving-the-report">Saving the report</a></li>
</ul>
</li>
<li><a href="#large-datasets">Large datasets</a></li>
<li><a href="#command-line-usage">Command line usage</a></li>
<li><a href="#advanced-usage">Advanced usage</a></li>
</ul>
</li>
<li><a href="#types">Types</a></li>
<li><a href="#how-to-contribute">How to contribute</a></li>
<li><a href="#editor-integration">Editor integration</a><ul>
<li><a href="#pycharm-integration">PyCharm integration</a></li>
<li><a href="#other-integrations">Other integrations</a></li>
</ul>
</li>
<li><a href="#dependencies">Dependencies</a></li>
</ul>
</li>
</ul>
</div>
<ul id="index">
<li><h3><a href="#header-submodules">Sub-modules</a></h3>
<ul>
<li><code><a title="pandas_profiling.config" href="config.html">pandas_profiling.config</a></code></li>
<li><code><a title="pandas_profiling.controller" href="controller/index.html">pandas_profiling.controller</a></code></li>
<li><code><a title="pandas_profiling.model" href="model/index.html">pandas_profiling.model</a></code></li>
<li><code><a title="pandas_profiling.report" href="report/index.html">pandas_profiling.report</a></code></li>
<li><code><a title="pandas_profiling.utils" href="utils/index.html">pandas_profiling.utils</a></code></li>
<li><code><a title="pandas_profiling.version" href="version.html">pandas_profiling.version</a></code></li>
<li><code><a title="pandas_profiling.visualisation" href="visualisation/index.html">pandas_profiling.visualisation</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="pandas_profiling.ProfileReport" href="#pandas_profiling.ProfileReport">ProfileReport</a></code></h4>
<ul class="">
<li><code><a title="pandas_profiling.ProfileReport.get_description" href="#pandas_profiling.ProfileReport.get_description">get_description</a></code></li>
<li><code><a title="pandas_profiling.ProfileReport.get_rejected_variables" href="#pandas_profiling.ProfileReport.get_rejected_variables">get_rejected_variables</a></code></li>
<li><code><a title="pandas_profiling.ProfileReport.get_sample" href="#pandas_profiling.ProfileReport.get_sample">get_sample</a></code></li>
<li><code><a title="pandas_profiling.ProfileReport.html" href="#pandas_profiling.ProfileReport.html">html</a></code></li>
<li><code><a title="pandas_profiling.ProfileReport.to_app" href="#pandas_profiling.ProfileReport.to_app">to_app</a></code></li>
<li><code><a title="pandas_profiling.ProfileReport.to_file" href="#pandas_profiling.ProfileReport.to_file">to_file</a></code></li>
<li><code><a title="pandas_profiling.ProfileReport.to_html" href="#pandas_profiling.ProfileReport.to_html">to_html</a></code></li>
<li><code><a title="pandas_profiling.ProfileReport.to_json" href="#pandas_profiling.ProfileReport.to_json">to_json</a></code></li>
<li><code><a title="pandas_profiling.ProfileReport.to_notebook_iframe" href="#pandas_profiling.ProfileReport.to_notebook_iframe">to_notebook_iframe</a></code></li>
<li><code><a title="pandas_profiling.ProfileReport.to_widgets" href="#pandas_profiling.ProfileReport.to_widgets">to_widgets</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.7.2</a>.</p>
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad()</script>
</body>
</html>